// 负责axios的配置，导出配置好的axios
import axios from 'axios'
import auth from '@/utils/auth'
import router from '@/router'
import JSONbig from 'json-bigint'

// 进行axios的配置
// 1. 基准地址配置
axios.defaults.baseURL = 'http://ttapi.research.itcast.cn/mp/v1_0/'
// 2. 请求头配置
// axios.defaults.headers.Authorization = `Bearer ${auth.getUser().token}`
// 3. 改json转换方式
axios.defaults.transformResponse = [data => {
    // 通过json-bigint对data进行处理,处理后返回即可
    // data理想情况下是json数据，后台做删除的时候没响应 data === null 的
    try {
        return JSONbig.parse(data)
    } catch (e) {
        return data
    }
}]

// 请求拦截器
axios.interceptors.request.use(config => {
    // 给请求头追加token(每次请求前都会做，拿到存储的token)
    config.headers.Authorization = `Bearer ${auth.getUser().token}`
    return config
}, e => Promise.reject(e))

// 响应拦截器
axios.interceptors.response.use(res => res, err => {
    // 判断响应状态码是401，清除本地的用户信息，跳转至登录页面
    if (err.response && err.response.status === 401) {
        auth.delUser()
        // 1. 编程式导航  this.$router.push('/login')  this不是vue实例
        // 2. $router 其实就是我们自己初始化的 router实例 src/router/index.js导出
        // 3. 此模块导入路由实例，使用路由实例调用push函数即可
        router.push('/login')
    }
    return Promise.reject(err)
})

export default axios
